#Boa:Dialog:saldos

import wx
import wx.grid
import utiles
import consultasBD
import consultasBD
import utiles
import sincronizar_tabla
import BuscaProveedor  
import Mensaje
import Pagos
from decimal import Decimal
import ChequesAlta
import os

ROJO = (255, 145, 145, 255)
VERDE = (145, 255, 145, 255)
AZUL = (145, 145, 255, 255)
BLANCO = (255, 255, 255, 255)
AMARILLO = (254, 248, 191, 255)
GRIS = ( 220, 220, 220, 255)
NEGRO = ( 0, 0, 0, 255)
VERDENEGRO = ( 47, 79, 79, 255)

def create(parent):
    return saldos(parent)

[wxID_SALDOS, wxID_SALDOSBUTTON1, wxID_SALDOSBUTTON2, wxID_SALDOSBUTTON3, 
 wxID_SALDOSBUTTON4, wxID_SALDOSBUTTON5, wxID_SALDOSBUTTON6, 
 wxID_SALDOSBUTTON7, wxID_SALDOSBUTTON8, wxID_SALDOSBUTTON9, 
 wxID_SALDOSCHECKBOX1, wxID_SALDOSCOMBOBOX1, wxID_SALDOSGRID1, 
 wxID_SALDOSINNOMBREPROVEE, wxID_SALDOSINPROVEEDOR, wxID_SALDOSSTATICBOX1, 
 wxID_SALDOSSTATICTEXT1, wxID_SALDOSSTATICTEXT2, 
] = [wx.NewId() for _init_ctrls in range(18)]

class saldos(wx.Dialog):
    def _init_ctrls(self, prnt):
        # generated method, don't edit
        wx.Dialog.__init__(self, id=wxID_SALDOS, name='saldos', parent=prnt,
              pos=wx.Point(9, 69), size=wx.Size(1023, 534),
              style=wx.DEFAULT_DIALOG_STYLE, title='Saldo con Proveedores')
        self.SetClientSize(wx.Size(1015, 507))

        self.staticText1 = wx.StaticText(id=wxID_SALDOSSTATICTEXT1,
              label='Temporada', name='staticText1', parent=self,
              pos=wx.Point(16, 1), size=wx.Size(54, 13), style=0)

        self.staticBox1 = wx.StaticBox(id=wxID_SALDOSSTATICBOX1,
              label='Proveedor', name='staticBox1', parent=self,
              pos=wx.Point(152, 1), size=wx.Size(392, 48), style=0)

        self.comboBox1 = wx.ComboBox(choices=[], id=wxID_SALDOSCOMBOBOX1,
              name='comboBox1', parent=self, pos=wx.Point(16, 17),
              size=wx.Size(130, 21), style=0, value='')
        self.comboBox1.Bind(wx.EVT_COMBOBOX, self.OnCambiaComboTemporada,
              id=wxID_SALDOSCOMBOBOX1)

        self.inproveedor = wx.TextCtrl(id=wxID_SALDOSINPROVEEDOR,
              name='inproveedor', parent=self, pos=wx.Point(160, 18),
              size=wx.Size(72, 21), style=0, value='')

        self.inNombreProvee = wx.TextCtrl(id=wxID_SALDOSINNOMBREPROVEE,
              name='inNombreProvee', parent=self, pos=wx.Point(232, 18),
              size=wx.Size(224, 21), style=0, value='')
        self.inNombreProvee.SetEditable(True)

        self.button1 = wx.Button(id=wxID_SALDOSBUTTON1, label='Buscar',
              name='button1', parent=self, pos=wx.Point(464, 16),
              size=wx.Size(72, 23), style=0)
        self.button1.Bind(wx.EVT_BUTTON, self.OnBuscarProveedorButton,
              id=wxID_SALDOSBUTTON1)

        self.button7 = wx.Button(id=wxID_SALDOSBUTTON7, label='Aceptar',
              name='button7', parent=self, pos=wx.Point(552, 16),
              size=wx.Size(75, 23), style=0)
        self.button7.Bind(wx.EVT_BUTTON, self.OnAceptar, id=wxID_SALDOSBUTTON7)

        self.button3 = wx.Button(id=wxID_SALDOSBUTTON3,
              label='Saldos TOTALES todos los proveedores', name='button3',
              parent=self, pos=wx.Point(800, 8), size=wx.Size(208, 24),
              style=0)
        self.button3.Bind(wx.EVT_BUTTON, self.OnTOTALESproveedores,
              id=wxID_SALDOSBUTTON3)

        self.button4 = wx.Button(id=wxID_SALDOSBUTTON4, label='Pagos',
              name='button4', parent=self, pos=wx.Point(8, 472),
              size=wx.Size(72, 23), style=0)
        self.button4.Bind(wx.EVT_BUTTON, self.OnPagos, id=wxID_SALDOSBUTTON4)

        self.button8 = wx.Button(id=wxID_SALDOSBUTTON8, label='Ajuste',
              name='button8', parent=self, pos=wx.Point(88, 472),
              size=wx.Size(72, 23), style=0)
        self.button8.Bind(wx.EVT_BUTTON, self.OnAjustar, id=wxID_SALDOSBUTTON8)

        self.button6 = wx.Button(id=wxID_SALDOSBUTTON6, label='Limpiar',
              name='button6', parent=self, pos=wx.Point(168, 472),
              size=wx.Size(75, 23), style=0)
        self.button6.Bind(wx.EVT_BUTTON, self.OnLimpiar, id=wxID_SALDOSBUTTON6)

        self.checkBox1 = wx.CheckBox(id=wxID_SALDOSCHECKBOX1,
              label='Incluye documentos internos', name='checkBox1',
              parent=self, pos=wx.Point(280, 472), size=wx.Size(168, 13),
              style=0)
        self.checkBox1.SetValue(False)
        self.checkBox1.Bind(wx.EVT_CHECKBOX, self.OnChequear,
              id=wxID_SALDOSCHECKBOX1)

        self.button2 = wx.Button(id=wxID_SALDOSBUTTON2, label='Imprimir',
              name='button2', parent=self, pos=wx.Point(848, 472),
              size=wx.Size(75, 23), style=0)
        self.button2.Bind(wx.EVT_BUTTON, self.OnImprimir, id=wxID_SALDOSBUTTON2)

        self.button5 = wx.Button(id=wxID_SALDOSBUTTON5, label='Salir',
              name='button5', parent=self, pos=wx.Point(928, 472),
              size=wx.Size(75, 23), style=0)
        self.button5.Bind(wx.EVT_BUTTON, self.OnSalir, id=wxID_SALDOSBUTTON5)

        self.grid1 = wx.grid.Grid(id=wxID_SALDOSGRID1, name='grid1',
              parent=self, pos=wx.Point(8, 64), size=wx.Size(1000, 400),
              style=0)
        self.grid1.Bind(wx.grid.EVT_GRID_CELL_LEFT_DCLICK, self.OnDobleClick)

        self.staticText2 = wx.StaticText(id=wxID_SALDOSSTATICTEXT2,
              label='(no se utilizan para componer el saldo)',
              name='staticText2', parent=self, pos=wx.Point(296, 488),
              size=wx.Size(184, 13), style=0)

        self.button9 = wx.Button(id=wxID_SALDOSBUTTON9,
              label='Saldos TOTALES (sin negativos)', name='button9',
              parent=self, pos=wx.Point(800, 32), size=wx.Size(208, 23),
              style=0)
        self.button9.Bind(wx.EVT_BUTTON, self.OnTOTALsinNegativos,
              id=wxID_SALDOSBUTTON9)

    def __init__(self, parent):
        self._init_ctrls(parent)
        self.llenarCombo()
        self.crearGrilla()
        self.total = "" 
        self.habilita()
        self.comboBox1.SetFocus()

    def autosizegrilla(self):
        for i in xrange(self.grid1.GetNumberCols()):
            self.grid1.AutoSizeColumn(i,True)
        self.grid1.Refresh()

    def crearGrilla(self):
        columnas =['Fecha\nOperacion','Operacion','Tipo Doc','Nro Documento','Debito\n(1)','Debito\n(2)','Credito\n(1)','Credito\n(2)','Saldo\n(1)','Saldo\n(2)','TOTAL','Observacion']
        #FechaOperacion,Operacion,TipoDoc,NroDoc,Debito1,Debito2,Credito1,Credito2,Saldo1,Saldo2,TOTAL
        #0              1         2       3      4       5       6        7        8      9      10
        self.grid1.CreateGrid(1,len(columnas))
        for i,col in enumerate(columnas): 
            self.grid1.SetColLabelValue(i, col)
        self.autosizegrilla()
        self.grid1.EnableEditing(False)
        
    def llenarCombo(self):
        anio = int(utiles.obtenerFecha("Y-m-d")[:4])
        mes = int(utiles.obtenerFecha("Y-m-d")[5:7])
        dia = int(utiles.obtenerFecha("Y-m-d")[-2:])
        anioanterioralanterior = anio -2
        anioanterior = anio -1
        anioactual = anio
        aniosiguiente = anio + 1
        self.comboBox1.Append("INVIERNO"+str(anioanterioralanterior))
        self.comboBox1.Append("VERANO"+str(anioanterioralanterior))        
        self.comboBox1.Append("INVIERNO"+str(anioanterior))
        self.comboBox1.Append("VERANO"+str(anioanterior))
        self.comboBox1.Append("INVIERNO"+str(anioactual))
        self.comboBox1.Append("VERANO"+str(anioactual))
        self.comboBox1.Append("INVIERNO"+str(aniosiguiente))
        self.comboBox1.Append("VERANO"+str(aniosiguiente))
        self.comboBox1.Append("NO PROVEEDORES")
        self.comboBox1.SetEditable(False)
        if mes < 8: #invierno
            self.comboBox1.SetSelection(3)
        else: #verano
            self.comboBox1.SetSelection(4)
            
    def OnBuscarProveedorButton(self, event):
        if self.inproveedor.GetValue() != "":
            consultaSQL = "SELECT idproveedor,nombre FROM proveedor WHERE idproveedor = '"+self.inproveedor.GetValue()+"' "
            resultado = consultasBD.ordenCrudaDict(consultaSQL)
            if resultado != ():
                proveedor = resultado[0]
                self.inproveedor.SetLabel(proveedor["idproveedor"])
                self.inNombreProvee.SetLabel(proveedor["nombre"])
                self.OnAceptar(None)
                self.button4.SetFocus()
                return
            self.inproveedor.SetLabel("")
            self.inNombreProvee.SetLabel("")
            self.inproveedor.SetFocus()
            return
        if self.inNombreProvee.GetValue() != "":
            consultaSQL = "SELECT idproveedor,nombre FROM proveedor WHERE nombre LIKE '%"+self.inNombreProvee.GetValue()+"%' "
            resultado = consultasBD.ordenCrudaDict(consultaSQL)
            if resultado != () and len(resultado)==1:
                proveedor = resultado[0]
                self.inproveedor.SetLabel(proveedor["idproveedor"])
                self.inNombreProvee.SetLabel(proveedor["nombre"])
                self.OnAceptar(None)
                self.button4.SetFocus()
                return
        import BuscaProveedor2
        ventana = BuscaProveedor2.Dialog1(self,self.inNombreProvee.GetLabel())
        try:
            ventana.ShowModal()
            eleccion = ventana.getSeleccion()
        finally:
            ventana.Destroy()
        if eleccion.split(" / ") != ['']:
            self.inproveedor.SetValue(eleccion.split(" / ")[1])
            self.inNombreProvee.SetValue(eleccion.split(" / ")[0])
            self.OnAceptar(None)
            self.button4.SetFocus()
        else:
            self.button7.SetFocus()

    def OnSalir(self, event):
        self.Close()

    def OnLimpiar(self, event):
        self.grid1.ClearGrid()
        for fil in xrange(self.grid1.GetNumberRows()):
            self.grid1.DeleteRows()
        self.grid1.AppendRows()
        #self.comboBox1.SetSelection(-1)
        self.inproveedor.SetLabel("")
        self.inNombreProvee.SetLabel("")
        self.habilita()
        self.comboBox1.SetFocus()

    def habilita(self,habilitacion=True):
        self.comboBox1.Enable(habilitacion)
        self.inproveedor.Enable(habilitacion)
        self.inNombreProvee.Enable(habilitacion)
        self.button1.Enable(habilitacion)
        self.button7.Enable(habilitacion)
        self.button3.Enable(habilitacion)
        self.button2.Enable(not habilitacion)
        self.button4.Enable(not habilitacion)
        self.button8.Enable(not habilitacion)

    def llenarGrilla(self):
        self.habilita(False)
        if self.inproveedor.GetLabel()=="":
            utiles.mensaje(None,"Debe especificar un Proveedor")
            self.inproveedor.SetFocus()
            return
        if self.comboBox1.GetLabel()=="":
            utiles.mensaje(None,"Debe especificar una temporada")
            self.inproveedor.SetFocus()
            return
        if self.inproveedor.GetLabel() != "":
            idproveedor = self.inproveedor.GetLabel()
            opcProveedor = " AND idproveedor='"+idproveedor+"' "
        else:
            idproveedor = ""
            opcProveedor = ""
        if self.comboBox1.GetLabel() != "":
            temporada = self.comboBox1.GetLabel()
            opcTemporada = " AND temporada LIKE '%"+temporada+"%' "
        else:
            temporada = ""
            opcTemporada = ""
        r1 = "SELECT * FROM comprasaldos \n"
        r2 = "WHERE 1 "+opcProveedor+opcTemporada+" \n"
        r3 = "ORDER BY fecha,idregistro ASC "
        sql = r1+r2+r3
        resultados = consultasBD.ordenCrudaDict(sql)
        if resultados==() or resultados==None or len(resultados)==0:
            utiles.mensaje(None,"No se encontraron datos")
            self.comboBox1.SetFocus()
            return

        acum=Decimal("0.0")
        deb1=Decimal("0.0")
        deb2=Decimal("0.0")
        cre1=Decimal("0.0")
        cre2=Decimal("0.0")
        sal1=Decimal("0.0")
        sal2=Decimal("0.0")

        # FactA 0 - FactC 1 - Rto1 2 - Rto2 3 - NtaCredito 4 - NtaDebito 5 - 
        # Otros2 6 - Otros1 7 - Pag1 8 - Pag2 9 - Credito2 10
        tipoDocumento = {0:"Fact. A", 1:"Fact. C", 2:"Remito", 3:"Remito", 4:"Nta.Credito", \
                         5:"Nta.Debito", 6:"Otros", 7:"Otros", 8:"Pago", 9:"Pago", 10:"Credito" }
        i = 0
        for item in resultados:
            if not self.checkBox1.GetValue() and item['interno']==1:
                continue
            idoperacion=str(item['idoperacion'])
            if item['interno']==1:
                idoperacion+=" *"
            idforma1o2= (item['idforma1o2'])
            fecha = utiles.invertirFecha2(str(item['fecha'])[:10])
            try:
                tipodoc = item['tipodoc']
                tipodoc = tipoDocumento[tipodoc]
            except:
                tipodoc = ""
            self.grid1.SetCellValue(i, 0, fecha)
        #FechaOperacion,Operacion,TipoDoc,NroDoc,Debito1,Debito2,Credito1,Credito2,Saldo1,Saldo2,TOTAL
        #0              1         2       3      4       5       6        7        8      9      10
            self.grid1.SetCellBackgroundColour(i,5,GRIS)
            self.grid1.SetCellBackgroundColour(i,7,GRIS)
            self.grid1.SetCellBackgroundColour(i,9,GRIS)
            self.grid1.SetCellValue(i,1,idoperacion)
            self.grid1.SetCellValue(i,2,tipodoc)
            self.grid1.SetCellValue(i,3,str(item['nrofactura']))
            try:
                self.grid1.SetCellValue(i,11,item['observaciones'])
            except:
                self.grid1.SetCellValue(i,11,"")
            monto1 = Decimal(str(item['monto1'])).quantize(Decimal("0.10"))
            monto2 = Decimal(str(item['monto2'])).quantize(Decimal("0.10"))
        #FechaOperacion,Operacion,TipoDoc,NroDoc,Debito1,Debito2,Credito1,Credito2,Saldo1,Saldo2,TOTAL
        #0              1         2       3      4       5       6        7        8      9      10
            self.grid1.SetCellAlignment(i, 4, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
            self.grid1.SetCellAlignment(i, 5, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
            self.grid1.SetCellAlignment(i, 6, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
            self.grid1.SetCellAlignment(i, 7, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
            self.grid1.SetCellAlignment(i, 8, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
            self.grid1.SetCellAlignment(i, 9, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
            self.grid1.SetCellAlignment(i, 10, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)

        #FechaOperacion,Operacion,TipoDoc,NroDoc,Debito1,Debito2,Credito1,Credito2,Saldo1,Saldo2,TOTAL
        #0              1         2       3      4       5       6        7        8      9      10
            if ((idoperacion=="COMPRA" or idoperacion=="NTA.DEBITO") and idforma1o2==str(1)) or \
               (idoperacion=="AJUSTE" and idforma1o2==str(1) and str(item['tipodoc'])==str(7)):
                self.grid1.SetCellValue(i, 4, str(monto1)) #debito 1
                self.grid1.SetCellValue(i, 5, "0.00") #debito 2 en 0
                self.grid1.SetCellValue(i, 6, "0.00")
                self.grid1.SetCellValue(i, 7, "0.00")
                if item['interno']==0:
                    deb1=deb1+monto1
                else:
                    deb1=deb1+Decimal("0.00")
                self.grid1.SetCellValue(i, 8, str(deb1-cre1))
                self.grid1.SetCellValue(i, 9, str(deb2-cre2))
                self.grid1.SetCellValue(i, 10, str((deb1+deb2)-(cre1+cre2)))
                i+= 1
                self.grid1.AppendRows()
                continue
            if ((idoperacion=="COMPRA" or idoperacion=="NTA.DEBITO") and idforma1o2==str(2)) or \
               (idoperacion=="AJUSTE" and idforma1o2==str(2) and str(item['tipodoc'])==str(7)):
                self.grid1.SetCellValue(i, 4, "0.00")                   #debito 1 en 0
                self.grid1.SetCellValue(i, 5, str(monto2)) #debito 2
                self.grid1.SetCellValue(i, 6, "0.00")
                self.grid1.SetCellValue(i, 7, "0.00")
                if item['interno']==0:
                    deb2=deb2+monto2
                else:
                    deb2=deb2+Decimal("0.00")
                self.grid1.SetCellValue(i, 8, str(deb1-cre1))
                self.grid1.SetCellValue(i, 9, str(deb2-cre2))
                self.grid1.SetCellValue(i, 10, str((deb1+deb2)-(cre1+cre2)))
                i+= 1
                self.grid1.AppendRows()
                continue
            if (idforma1o2==str(1) and (idoperacion!="COMPRA" or idoperacion!="NTA.DEBITO")):
                self.grid1.SetCellValue(i, 4, "0.00")                   #DEVOLUCION 1 en 0
                self.grid1.SetCellValue(i, 5, "0.00")                   #DEVOLUCION 2
                self.grid1.SetCellValue(i, 6, str(monto1))
                self.grid1.SetCellValue(i, 7, "0.00")
                if item['interno']==0:
                    cre1=cre1+monto1
                else:
                    cre1=cre1+Decimal("0.00")
                self.grid1.SetCellValue(i, 8, str(deb1-cre1))
                self.grid1.SetCellValue(i, 9, str(deb2-cre2))
                self.grid1.SetCellValue(i, 10, str((deb1+deb2)-(cre1+cre2)))
                i+= 1
                self.grid1.AppendRows()
                continue
            if (idforma1o2==str(2) and (idoperacion!="COMPRA" or idoperacion!="NTA.DEBITO")):
                self.grid1.SetCellValue(i, 4, "0.00")                   #DEVOLUCION 1 en 0
                self.grid1.SetCellValue(i, 5, "0.00")                   
                self.grid1.SetCellValue(i, 6, "0.00")
                self.grid1.SetCellValue(i, 7, str(monto2))
                if item['interno']==0:
                    cre2=cre2+monto2
                else:
                    cre2=cre2+Decimal("0.00")
                self.grid1.SetCellValue(i, 8, str(deb1-cre1))
                self.grid1.SetCellValue(i, 9, str(deb2-cre2))
                self.grid1.SetCellValue(i, 10, str((deb1+deb2)-(cre1+cre2)))
                i+= 1
                self.grid1.AppendRows()
                continue

        self.autosizegrilla()

    def OnTOTALESproveedores(self, event):
        temporada = self.comboBox1.GetLabel()
        if temporada == "":
            utiles.mensaje(None,"Debe seleccionar una temporada")
            self.comboBox1.SetFocus()
            return

        r01 = "SELECT p.nombre,p.idproveedor,SUM(s.monto1)+SUM(s.monto2) AS debito "
        r02 = "FROM proveedor p, comprasaldos s "
        r03 = "WHERE temporada LIKE '%"+temporada+"%' "
        r04 = "      AND p.idproveedor=s.idproveedor "
        r05 = "      AND (idoperacion='COMPRA' OR idoperacion='NTA.DEBITO') "
        r06 = "      AND s.interno='0' "
        r07 = "GROUP BY p.idproveedor ORDER BY p.nombre "
        sql = r01+r02+r03+r04+r05+r06+r07
        resultado = consultasBD.ordenCrudaDict(sql)
        auxDebito = []
        for item in resultado:
            auxDebito.append(item)
        r01 = "SELECT p.nombre,p.idproveedor,SUM(s.monto1)+SUM(s.monto2) AS debito "
        r02 = "FROM proveedor p, comprasaldos s "
        r03 = "WHERE temporada LIKE  '%"+temporada+"%' "
        r04 = "      AND p.idproveedor = s.idproveedor "
        r05 = "      AND idoperacion LIKE  '%AJUSTE%' "
        r06 = "      AND s.interno='0' "
        r07 = "      AND tipodoc='7' "
        r08 = "GROUP BY p.idproveedor ORDER BY p.nombre "
        sql = r01+r02+r03+r04+r05+r06+r07+r08
        resultado = consultasBD.ordenCrudaDict(sql)
        auxAjDebito = []
        for item in resultado:
            auxAjDebito.append(item)
        debito = []
        for item in auxDebito:
            aux = {}
            idproveedor = item["idproveedor"]
            nombre = item["nombre"]
            miDebito = item["debito"]
            for i in auxAjDebito:
                if i["idproveedor"]==idproveedor:
                    miDebito+=i["debito"]
                    auxAjDebito.remove(i)
                    break
            aux["idproveedor"] = idproveedor
            aux["nombre"] = nombre
            aux["debito"] = miDebito
            debito.append(aux)
        for item in auxAjDebito:
            debito.append(item)

        r01 = "SELECT p.nombre,p.idproveedor,(sum(s.monto1)*-1)+(sum(s.monto2)*-1) AS credito "
        r02 = "FROM proveedor p, comprasaldos s "
        r03 = "WHERE temporada LIKE '%"+temporada+"%' "
        r04 = "      AND p.idproveedor=s.idproveedor "
        r05 = "      AND (idoperacion='DEVOLUCION' OR idoperacion='NTA.CREDITO' OR idoperacion LIKE '%PAGO%') "
        r06 = "      AND s.interno='0' "
        r07 = "GROUP BY p.idproveedor ORDER BY p.nombre "
        sql = r01+r02+r03+r04+r05+r06+r07
        resultado = consultasBD.ordenCrudaDict(sql)
        auxCredito = []
        for item in resultado:
            auxCredito .append(item)
        r01 = "SELECT p.nombre,p.idproveedor,(sum(s.monto1)*-1)+(sum(s.monto2)*-1) AS credito "
        r02 = "FROM proveedor p, comprasaldos s "
        r03 = "WHERE temporada LIKE '%"+temporada+"%' "
        r04 = "      AND p.idproveedor=s.idproveedor "
        r05 = "      AND idoperacion LIKE '%AJUSTE%' "
        r06 = "      AND s.interno='0' "
        r07 = "      AND tipodoc='6' "
        r08 = "GROUP BY p.idproveedor ORDER BY p.nombre "
        sql = r01+r02+r03+r04+r05+r06+r07+r08
        resultado = consultasBD.ordenCrudaDict(sql)
        auxAjCredito = []
        for item in resultado:
            auxAjCredito.append(item)
        credito = []
        for item in auxCredito:
            aux = {}
            idproveedor = item["idproveedor"]
            nombre = item["nombre"]
            miCredito = item["credito"]
            for i in auxAjCredito:
                if i["idproveedor"]==idproveedor:
                    miCredito+=i["credito"]
                    auxAjCredito.remove(i)
                    break
            aux["idproveedor"] = idproveedor
            aux["nombre"] = nombre
            aux["credito"] = miCredito
            credito.append(aux)
        for item in auxAjCredito:
            credito.append(item)

        fila = ["Orden","Proveedor", "Id. Proveedor", "Saldo TOTAL"]
        listaSaldos = []
        listaSaldos.append(fila)
        
        orden = 0

        for item in debito:
            idproveedor = item["idproveedor"]
            nombre = item["nombre"]
            miDebito = item["debito"]
            aux = ""
            for itemCredito in credito:
                idproveedorCredito = itemCredito["idproveedor"]
                if idproveedor == idproveedorCredito:
                    aux = itemCredito
                    credito.remove(itemCredito)
                    break
            if aux == "":
                orden+= 1
                aux1 = str(orden)
                aux2 = nombre
                aux3 = idproveedor
                aux4 = str(miDebito)
                longitud = len(aux4)
##                for i in xrange(15-longitud):
##                    aux4 = "&nbsp"+aux4
                fila = [aux1,aux2,aux3,aux4]
                listaSaldos.append(fila)
            else:
                miCredito = aux["credito"]
                total = miDebito+miCredito
                orden+= 1
                aux1 = str(orden)
                aux2 = nombre
                aux3 = idproveedor
                aux4 = str(total)
##                longitud = len(aux4)
##                for i in xrange(15-longitud):
##                    aux4 = "&nbsp"+aux4
                fila = [aux1,aux2,aux3,aux4]
                listaSaldos.append(fila)

        for item in credito:
            idproveedor = item["idproveedor"]
            nombre = item["nombre"]
            miCredito = item["credito"]
            orden+= 1
            aux1 = str(orden)
            aux2 = nombre
            aux3 = idproveedor
            aux4 = str(miCredito)
##            longitud = len(aux4)
##            for i in xrange(15-longitud):
##                aux4 = "&nbsp"+aux4
            fila = [aux1,aux2,aux3,aux4]
            listaSaldos.append(fila)

        utiles.reporte_html(self,listaSaldos, "","0",alineacion=[2,0,0,2])

    def OnPagos(self, event):
        temporada = self.comboBox1.GetLabel()
        idproveedor = self.inproveedor.GetLabel()
        nombre = self.inNombreProvee.GetLabel()
        import ComprasPagos
        dlg = ComprasPagos.ComprasPagos(self,temporada,idproveedor,nombre)
        try:
            dlg.ShowModal()
        finally:
            dlg.Destroy()
        self.grid1.ClearGrid()
        for item in xrange(self.grid1.GetNumberRows()):
            self.grid1.DeleteRows()
        self.grid1.AppendRows()
        self.OnAceptar(None)

    def OnAceptar(self, event):
        self.llenarGrilla()

    def OnImprimir(self, event):
        print "Imprimir"
        #FechaOperacion,Operacion,TipoDoc,NroDoc,Debito1,Debito2,Credito1,Credito2,Saldo1,Saldo2,TOTAL
        #0              1         2       3      4       5       6        7        8      9      10

        f=open("c:\\matrisamor.doc\\reporte-ComprasSaldos.html","w")
        numeroPagina = 1
        nrosuc,nombresuc = utiles.datosSucursal()
        
        totalItemPorPagina = 55
        totalPaginas = int(self.grid1.GetNumberRows()-1) / totalItemPorPagina 
        totalPaginas+= 1

        def encabezadoPagina(texto):
            fecha = utiles.getfechaTime()

            a = '<table width="100%" cellspacing="0" border="0">\n'
            a+= '<tr>\n'
            a+= '<td valign="center" align="left" width="33%">'
            a+= 'SUSSAN BOUTIQUE<br>Saldos con Proveedores: '+self.inNombreProvee.GetLabel()
            a+= '<br></td>\n<td valign="center" align="left" width="34%">'
            a+= '<br>'
            a+= '</td>\n'
            a+= '<td valign="center" align="right" width="33%">'+fecha
            a+= '<br>P&aacute;gina '+str(numeroPagina)+' / '+str(totalPaginas)+'</td>\n'
            a+= '</tr>\n'
            a+= '</table>\n'
            texto+= a
            return texto
        
        def encabezadoTabla(texto):
        #FechaOperacion,Operacion,TipoDoc,NroDoc,Debito1,Debito2,Credito1,Credito2,Saldo1,Saldo2,TOTAL
        #0              1         2       3      4       5       6        7        8      9      10
            a = '<hr>'

            tama = '"0.05"'
            a+= '<table width="100%" cellspacing="1" border="0"> \n'
            a+= '<tr>\n'
            a+= '<td valign="top" align="right"><font size='+tama+'>Orden</font></td> \n'
            a+= '<td valign="top" align="center"><font size='+tama+'>Fecha</font></td> \n'
            a+= '<td valign="top" align="left"><font size='+tama+'>Descripci&oacute;n</font></td> \n'
            a+= '<td valign="top" align="right"><font size='+tama+'>Debito 1</font></td> \n'
            a+= '<td valign="top" align="right"><font size='+tama+'>Debito 2</font></td> \n'
            a+= '<td valign="top" align="right"><font size='+tama+'>Credito 1</font></td> \n'
            a+= '<td valign="top" align="right"><font size='+tama+'>Credito 2</font></td> \n'
            a+= '<td valign="top" align="right"><font size='+tama+'>Saldo 1</font></td> \n'
            a+= '<td valign="top" align="right"><font size='+tama+'>Saldo 2</font></td> \n'
            a+= '<td valign="top" align="right"><font size='+tama+'>TOTAL</font></td> \n'
            a+= '</tr> \n'
#            a+= '</table>\n'
            a+= '<tr>\n'
            a+= '<td colspan="10"><hr></td>\n'
            a+= '</tr>\n'
            texto+= a
            return texto
        
        cadena = '<?xml version="1.0" encoding="utf-8" ?> \n'
        cadena+= '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> \n'
        cadena+= '<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> \n'
        cadena+= '<head> \n'
        cadena+= '<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> \n'
        cadena+= '<meta name="generator" content="Docutils 0.4.1: http://docutils.sourceforge.net/" /> \n'
        cadena+= '<title>Sussan Boutique</title> \n'
        cadena+= '</head> \n'
        cadena+= '<body> \n'

        cadena = encabezadoPagina(cadena)
        cadena = encabezadoTabla(cadena)
        f.write(cadena)

        renglon = 0
        for i in xrange(self.grid1.GetNumberRows()-1):
        #FechaOperacion,Operacion,TipoDoc,NroDoc,Debito1,Debito2,Credito1,Credito2,Saldo1,Saldo2,TOTAL
        #0              1         2       3      4       5       6        7        8      9      10
            orden = str(i+1)
            fecha = self.grid1.GetCellValue(i,0)
            tipo = self.grid1.GetCellValue(i,1)+" "+self.grid1.GetCellValue(i,2)+" "+self.grid1.GetCellValue(i,3)
            debito1 = self.grid1.GetCellValue(i,4)
            debito2 = self.grid1.GetCellValue(i,5)
            credito1 = self.grid1.GetCellValue(i,6)
            credito2 = self.grid1.GetCellValue(i,7)
            saldo1 = self.grid1.GetCellValue(i,8)
            saldo2 = self.grid1.GetCellValue(i,9)
            total = self.grid1.GetCellValue(i,10)
            
            tama = '"0.2"'
            cadena = '<tr> \n'
            cadena+= '<td valign="top" align="right"><font size='+tama+'>'+orden+'</font></td> \n'
            cadena+= '<td valign="top" align="center"><font size='+tama+'>'+fecha+'</font></td> \n'
            cadena+= '<td valign="top" align="left"><font size='+tama+'>'+tipo+'</font></td> \n'
            cadena+= '<td valign="top" align="right"><font size='+tama+'>'+debito1+'</font></td> \n'
            cadena+= '<td valign="top" align="right"><font size='+tama+'>'+debito2+'</font></td> \n'
            cadena+= '<td valign="top" align="right"><font size='+tama+'>'+credito1+'</font></td> \n'
            cadena+= '<td valign="top" align="right"><font size='+tama+'>'+credito2+'</font></td> \n'
            cadena+= '<td valign="top" align="right"><font size='+tama+'>'+saldo1+'</font></td> \n'
            cadena+= '<td valign="top" align="right"><font size='+tama+'>'+saldo2+'</font></td> \n'
            cadena+= '<td valign="top" align="right"><font size='+tama+'>'+total+'</font></td> \n'
            cadena+= '</tr>\n'
            f.write(cadena)
            
            renglon+= 1
            
            if renglon == totalItemPorPagina :
                f.write("</table><!-- salto de pagina -->\n")
                f.write("<p STYLE='page-break-after: always;'></p>\n")                
                renglon = 0
                numeroPagina+= 1
                cadena = encabezadoPagina("")
                cadena = encabezadoTabla(cadena)
                f.write(cadena)

        tama = '"0.2"'
            
        cadena = '</table>\n'
        f.write(cadena)
        f.close()

        import os
        os.system("taskkill /IM firefox.exe /F")
        os.system("c:\\explorer.lnk c:\\matrisamor.doc\\reporte-ComprasSaldos.html")

    def OnCambiaComboTemporada(self, event):
        if self.comboBox1.GetSelection()==6:
            self.inproveedor.SetLabel("9000013")
            self.OnBuscarProveedorButton(None)
            self.OnAceptar(None)
            self.button4.SetFocus()

    def OnChequear(self, event):
        if self.inproveedor.GetLabel()=="" and self.inNombreProvee.GetLabel()=="":
            self.inproveedor.SetFocus()
            return
        idproveedor = self.inproveedor.GetLabel()
        nombre = self.inNombreProvee.GetLabel()
        self.OnLimpiar(None)
        self.inproveedor.SetLabel(idproveedor)
        self.inNombreProvee.SetLabel(nombre)
        self.OnBuscarProveedorButton(None)
        self.OnAceptar(None)

    def OnAjustar(self, event):
        temporada = self.comboBox1.GetLabel()
        idproveedor = self.inproveedor.GetLabel()
        nombre = self.inNombreProvee.GetLabel()
        import ComprasSaldosAjuste
        dlg = ComprasSaldosAjuste.ComprasSaldosAjustes(self,temporada,idproveedor,nombre)
        try:
            dlg.ShowModal()
        finally:
            dlg.Destroy()
        self.grid1.ClearGrid()
        for item in xrange(self.grid1.GetNumberRows()):
            self.grid1.DeleteRows()
        self.grid1.AppendRows()
        self.OnAceptar(None)

    def OnDobleClick(self, event):
        fil = self.grid1.GetGridCursorRow()
        col = self.grid1.GetGridCursorCol()
        # FactA 0 - FactC 1 - Rto1 2 - Rto2 3 - NtaCredito 4 - NtaDebito 5 - 
        # Otros2 6 - Otros1 7 - Pag1 8 - Pag2 9 - Credito2 10
        #FechaOperacion,Operacion,TipoDoc,NroDoc,Debito1,Debito2,Credito1,Credito2,Saldo1,Saldo2,TOTAL
        #0              1         2       3      4       5       6        7        8      9      10
        operacion = self.grid1.GetCellValue(fil,1)
        tipodoc = self.grid1.GetCellValue(fil,2)
        print operacion
        print tipodoc

    def OnTOTALsinNegativos(self, event):
        temporada = self.comboBox1.GetLabel()
        if temporada == "":
            utiles.mensaje(None,"Debe seleccionar una temporada")
            self.comboBox1.SetFocus()
            return

        r01 = "SELECT p.nombre,p.idproveedor,SUM(s.monto1)+SUM(s.monto2) AS debito "
        r02 = "FROM proveedor p, comprasaldos s "
        r03 = "WHERE temporada LIKE '%"+temporada+"%' "
        r04 = "      AND p.idproveedor=s.idproveedor "
        r05 = "      AND (idoperacion='COMPRA' OR idoperacion='NTA.DEBITO') "
        r06 = "      AND s.interno='0' "
        r07 = "GROUP BY p.idproveedor ORDER BY p.nombre "
        sql = r01+r02+r03+r04+r05+r06+r07
        resultado = consultasBD.ordenCrudaDict(sql)
        auxDebito = []
        for item in resultado:
            auxDebito.append(item)
        r01 = "SELECT p.nombre,p.idproveedor,SUM(s.monto1)+SUM(s.monto2) AS debito "
        r02 = "FROM proveedor p, comprasaldos s "
        r03 = "WHERE temporada LIKE  '%"+temporada+"%' "
        r04 = "      AND p.idproveedor = s.idproveedor "
        r05 = "      AND idoperacion LIKE  '%AJUSTE%' "
        r06 = "      AND s.interno='0' "
        r07 = "      AND tipodoc='7' "
        r08 = "GROUP BY p.idproveedor ORDER BY p.nombre "
        sql = r01+r02+r03+r04+r05+r06+r07+r08
        resultado = consultasBD.ordenCrudaDict(sql)
        auxAjDebito = []
        for item in resultado:
            auxAjDebito.append(item)
        debito = []
        for item in auxDebito:
            aux = {}
            idproveedor = item["idproveedor"]
            nombre = item["nombre"]
            miDebito = item["debito"]
            for i in auxAjDebito:
                if i["idproveedor"]==idproveedor:
                    miDebito+=i["debito"]
                    auxAjDebito.remove(i)
                    break
            aux["idproveedor"] = idproveedor
            aux["nombre"] = nombre
            aux["debito"] = miDebito
            debito.append(aux)
        for item in auxAjDebito:
            debito.append(item)

        r01 = "SELECT p.nombre,p.idproveedor,(sum(s.monto1)*-1)+(sum(s.monto2)*-1) AS credito "
        r02 = "FROM proveedor p, comprasaldos s "
        r03 = "WHERE temporada LIKE '%"+temporada+"%' "
        r04 = "      AND p.idproveedor=s.idproveedor "
        r05 = "      AND (idoperacion='DEVOLUCION' OR idoperacion='NTA.CREDITO' OR idoperacion LIKE '%PAGO%') "
        r06 = "      AND s.interno='0' "
        r07 = "GROUP BY p.idproveedor ORDER BY p.nombre "
        sql = r01+r02+r03+r04+r05+r06+r07
        resultado = consultasBD.ordenCrudaDict(sql)
        auxCredito = []
        for item in resultado:
            auxCredito .append(item)
        r01 = "SELECT p.nombre,p.idproveedor,(sum(s.monto1)*-1)+(sum(s.monto2)*-1) AS credito "
        r02 = "FROM proveedor p, comprasaldos s "
        r03 = "WHERE temporada LIKE '%"+temporada+"%' "
        r04 = "      AND p.idproveedor=s.idproveedor "
        r05 = "      AND idoperacion LIKE '%AJUSTE%' "
        r06 = "      AND s.interno='0' "
        r07 = "      AND tipodoc='6' "
        r08 = "GROUP BY p.idproveedor ORDER BY p.nombre "
        sql = r01+r02+r03+r04+r05+r06+r07+r08
        resultado = consultasBD.ordenCrudaDict(sql)
        auxAjCredito = []
        for item in resultado:
            auxAjCredito.append(item)
        credito = []
        for item in auxCredito:
            aux = {}
            idproveedor = item["idproveedor"]
            nombre = item["nombre"]
            miCredito = item["credito"]
            for i in auxAjCredito:
                if i["idproveedor"]==idproveedor:
                    miCredito+=i["credito"]
                    auxAjCredito.remove(i)
                    break
            aux["idproveedor"] = idproveedor
            aux["nombre"] = nombre
            aux["credito"] = miCredito
            credito.append(aux)
        for item in auxAjCredito:
            credito.append(item)

        fila = ["Orden","Proveedor", "Id. Proveedor", "Saldo TOTAL"]
        listaSaldos = []
        listaSaldos.append(fila)
        
        orden = 0

        for item in debito:
            idproveedor = item["idproveedor"]
            nombre = item["nombre"]
            miDebito = item["debito"]
            aux = ""
            for itemCredito in credito:
                idproveedorCredito = itemCredito["idproveedor"]
                if idproveedor == idproveedorCredito:
                    aux = itemCredito
                    credito.remove(itemCredito)
                    break
            if miDebito < 0: continue
            if aux == "":
                orden+= 1
                aux1 = str(orden)
                aux2 = nombre
                aux3 = idproveedor
                aux4 = str(miDebito)
                longitud = len(aux4)
##                for i in xrange(15-longitud):
##                    aux4 = "&nbsp"+aux4
                fila = [aux1,aux2,aux3,aux4]
                listaSaldos.append(fila)
            else:
                miCredito = aux["credito"]
                total = miDebito+miCredito
                if total < 0: continue
                orden+= 1
                aux1 = str(orden)
                aux2 = nombre
                aux3 = idproveedor
                aux4 = str(total)
##                longitud = len(aux4)
##                for i in xrange(15-longitud):
##                    aux4 = "&nbsp"+aux4
                fila = [aux1,aux2,aux3,aux4]
                listaSaldos.append(fila)

        for item in credito:
            idproveedor = item["idproveedor"]
            nombre = item["nombre"]
            miCredito = item["credito"]
            orden+= 1
            aux1 = str(orden)
            aux2 = nombre
            aux3 = idproveedor
            aux4 = str(miCredito)
            if miCredito < 0: continue

##            longitud = len(aux4)
##            for i in xrange(15-longitud):
##                aux4 = "&nbsp"+aux4
            fila = [aux1,aux2,aux3,aux4]
            listaSaldos.append(fila)

        utiles.reporte_html(self,listaSaldos, "","0",alineacion=[2,0,0,2])
        
